import javax.swing.*; // 載入swing套件
class MyJFrame extends JFrame { // 定義我們的JFrame類別繼承JFrame
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
setTitle("我們的JFrame");
setVisible(true);
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}
版面配置大約分為幾種
import javax.swing.*; // 載入swing套件
class MyJFrame extends JFrame { // 定義我們的JFrame類別繼承JFrame
private JPanel contentPane;
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
contentPane = new JPanel();
setContentPane(contentPane); // 設定contentPane為容器
contentPane.setLayout(null); // 不使用版面配置
JButton btn1 = new JButton("按鈕元件1"); // 建立按鈕元件
btn1.setBounds(20, 20, 100, 30);
contentPane.add(btn1); // 新增到容器裡
setTitle("我們的JFrame");
setVisible(true);
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}
前面原本只有一個按鈕還很簡單,但是多了幾個按鈕後就要一個一個設定位置,程式碼會變得冗長複雜不好維護
import javax.swing.*; // 載入swing套件
class MyJFrame extends JFrame { // 定義我們的JFrame類別繼承JFrame
private JPanel contentPane;
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
contentPane = new JPanel();
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btn1 = new JButton("按鈕元件1");
btn1.setBounds(20, 20, 100, 30);
contentPane.add(btn1);
JButton btn2 = new JButton("按鈕元件2");
btn2.setBounds(300, 20, 100, 30);
contentPane.add(btn2);
JButton btn3 = new JButton("按鈕元件3");
btn3.setBounds(20, 80, 100, 30);
contentPane.add(btn3);
JButton btn4 = new JButton("按鈕元件4");
btn4.setBounds(300, 80, 100, 30);
contentPane.add(btn4);
setTitle("我們的JFrame");
setVisible(true);
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}
寫法: setLayout(new BorderLayout(hgap, vgap))
hgap => 控制水垂直間距;vgap => 控制水平間距
用add(Component comp, Object constraints)
=> comp: 加入的元件
=> constraints 元件配置的位置如下
import javax.swing.*; // 載入swing套件
import java.awt.*;
class MyJFrame extends JFrame { // 定義我們的JFrame類別繼承JFrame
private JPanel contentPane;
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JButton btnN = new JButton("按鈕元件N");
contentPane.add(btnN, BorderLayout.NORTH);
JButton btnS = new JButton("按鈕元件S");
contentPane.add(btnS, BorderLayout.SOUTH);
JButton btnW = new JButton("按鈕元件W");
contentPane.add(btnW, BorderLayout.WEST);
JButton btnE = new JButton("按鈕元件E");
contentPane.add(btnE, BorderLayout.EAST);
JButton btnC = new JButton("按鈕元件C");
contentPane.add(btnC, BorderLayout.CENTER);
setTitle("我們的JFrame");
setVisible(true);
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}
設定BorderLayout(50, 50) => 讓各元件產生50的間距
import javax.swing.*; // 載入swing套件
import java.awt.*;
class MyJFrame extends JFrame { // 定義我們的JFrame類別繼承JFrame
private JPanel contentPane;
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(50, 50));
setContentPane(contentPane);
JButton btnN = new JButton("按鈕元件N");
contentPane.add(btnN, BorderLayout.NORTH);
JButton btnS = new JButton("按鈕元件S");
contentPane.add(btnS, BorderLayout.SOUTH);
JButton btnW = new JButton("按鈕元件W");
contentPane.add(btnW, BorderLayout.WEST);
JButton btnE = new JButton("按鈕元件E");
contentPane.add(btnE, BorderLayout.EAST);
JButton btnC = new JButton("按鈕元件C");
contentPane.add(btnC, BorderLayout.CENTER);
setTitle("我們的JFrame");
setVisible(true);
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}
FlowLayout(int align)
align配置如下
import javax.swing.*; // 載入swing套件
import java.awt.*;
class MyJFrame extends JFrame { // 定義我們的JFrame類別繼承JFrame
private JPanel contentPane;
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
setContentPane(contentPane);
JButton btn1 = new JButton("按鈕元件1");
contentPane.add(btn1);
JButton btn2 = new JButton("按鈕元件2");
contentPane.add(btn2);
JButton btn3 = new JButton("按鈕元件3");
contentPane.add(btn3);
JButton btn4 = new JButton("按鈕元件4");
contentPane.add(btn4);
JButton btn5 = new JButton("按鈕元件5");
contentPane.add(btn5);
setTitle("我們的JFrame");
setVisible(true);
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}
GridLayout(int rows, int cols, int hgap, int vgap)
寫法: setLayout(new GridLayout(int rows, int cols, int hgap, int vgap))
rows => 設定水平列數 | cols => 設定垂直行數 | hgap, vgap若無需設定元件間距可不寫
如果參數都沒寫就會連著一列到底
import javax.swing.*; // 載入swing套件
import java.awt.*;
class MyJFrame extends JFrame { // 定義我們的JFrame類別繼承JFrame
private JPanel contentPane;
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(new GridLayout(2, 4, 5, 5));
setContentPane(contentPane);
JButton btnN = new JButton("按鈕元件N");
contentPane.add(btnN);
JButton btnS = new JButton("按鈕元件S");
contentPane.add(btnS);
JButton btnW = new JButton("按鈕元件W");
contentPane.add(btnW);
JButton btnE = new JButton("按鈕元件E");
contentPane.add(btnE);
JButton btnC = new JButton("按鈕元件C");
contentPane.add(btnC);
JButton btn1 = new JButton("按鈕元件1");
contentPane.add(btn1);
JButton btn2 = new JButton("按鈕元件2");
contentPane.add(btn2);
JButton btn3 = new JButton("按鈕元件3");
contentPane.add(btn3);
setTitle("我們的JFrame");
setVisible(true);
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}
分為事件來源、事件傾聽者、事件處理
addActionListener事件傾聽者物件
import javax.swing.*; // 載入swing套件
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class MyJFrame extends JFrame implements ActionListener{ // 定義我們的JFrame類別繼承JFrame
private JPanel contentPane;
MyJFrame(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 設定我們的視窗在螢幕上的(740, 350)位置出現,寬450高300
setBounds(740, 350, 450, 300);
contentPane = new JPanel();
contentPane.setLayout(new GridLayout(2, 4, 5, 5));
setContentPane(contentPane);
JButton btn1 = new JButton("事件來源");
contentPane.add(btn1);
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "事件處理中"); // 產生訊息通知對話方塊
}
});
JButton btn2 = new JButton("按鈕元件2");
contentPane.add(btn2);
btn2.addActionListener(this);
JButton btn3 = new JButton("按鈕元件3");
contentPane.add(btn3);
setTitle("我們的JFrame");
setVisible(true);
}
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null, "處理事件中...");
}
}
public class Main extends JPanel{
public static void main(String[] args) {
MyJFrame window = new MyJFrame();
}
}